"""
全数字乘积式的和

如果一个n位数包含了1至n的所有数字恰好一次，我们称它为全数字的；例如，五位数15234就是1至5全数字的。
7254是一个特殊的乘积，因为在等式39 × 186 = 7254中，被乘数、乘数和乘积恰好是1至9全数字的。
找出所有被乘数、乘数和乘积恰好是1至9全数字的乘法等式，并求出这些等式中乘积的和 
[注意:有些乘积可能从多个乘法等式中得到，但在求和的时候只计算一次]。

"""

def all_num(s):
    for i in range(1,10):
        if s.count(str(i))==0 or s.count(str(i))>1:
            return False
    else:
        return True

a=set()
for j in range(1,100):
    for k in range(100,10000):
        l=''
        l=str(j)+str(k)+str(j*k)
        if len(l)==9:
            if all_num(l):
                a.add(j*k)
                # print("{}*{}={}".format(j,k,j*k))
print(sum(a))       





# def anfan(n1,n2):#判断是否是全数字的
#     a=list(str(n1))+list(str(n2))+list(str(n1*n2))
#     hu=list(range(1,10))
#     b=[]
#     for i in hu:
#         b.append(str(i))
#     if b==sorted(a):     
#         return True
# def fanan(n1):#判断数是否含有重复数字
#     if len(list(str(n1)))==len(set(list(str(n1)))):
#         return True
# ana=[]#存储乘积结果
# fana = []#存储表达式
# #因数分别在(100, 1000) 和（10，100）之间
# for i in range(100,1000):
#     if fanan(i):
#         for j in range(10,100):
#             if fanan(j):
#                 if anfan(i,j):
#                     ana.append(i*j)
#                     fana.append('%d*%d=%d'%(i,j,i*j))
#                 elif len(list(str(i*j)))>=5:#乘积只有小于5位数才可能为全数字的
#                     break
# #因数分别在(2, 10) 和（1000，5000）之间                
# for i in range(2,10):
#     if fanan(i):
#         for j in range(1000,5000):
#             if fanan(j):
#                 if anfan(i,j):
#                     ana.append(i*j)
#                     fana.append('%d*%d=%d'%(i,j,i*j))
#                 elif len(list(str(i*j)))>=5:#乘积只有小于5位数才可能为全数字的
#                     break
# print(fana)
# print(sum(g for g in set(ana)))
# 答案：['138*42=5796', '157*28=4396', '159*48=7632', '186*39=7254', '198*27=5346', '297*18=5346', '483*12=5796', '4*1738=6952', '4*1963=7852']
# 全数字乘积式之和[重复的只计算一次]：45228
